home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 048 (1988-02-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 048 (1988-02-15)(Ossowski, Stefan)(DE)(PD).adf / Mandel / source / BorderLess.c next >
C/C++ Source or Header  |  1988-01-23  |  8KB  |  266 lines

  1. #define NULL 0L
  2. #include <intuition/intuition.h>
  3.  
  4. struct NewScreen ns = {
  5.     0,0,320,200,6,
  6.     1,2,EXTRA_HALFBRITE,
  7.     CUSTOMSCREEN,
  8.     NULL,
  9.     (UBYTE *)"Test screen",
  10.     NULL, NULL
  11. };
  12.  
  13. struct NewWindow nw = {
  14.     20,20,280,160,1,2,
  15.     CLOSEWINDOW | RAWKEY,
  16.     WINDOWCLOSE | WINDOWSIZING | WINDOWDEPTH | WINDOWDRAG | GIMMEZEROZERO |
  17.         SMART_REFRESH | ACTIVATE | NOCAREREFRESH,
  18.     NULL, NULL,
  19.     (UBYTE *)"Test Window: borderless or not",
  20.     NULL,
  21.     NULL,
  22.     20,20, -1, -1,
  23.     CUSTOMSCREEN
  24. };
  25.  
  26. struct Library *GfxBase, *IntuitionBase, *LayersBase, *OpenLibrary();
  27. struct Screen *screen, *OpenScreen();
  28. struct Window *window, *OpenWindow();
  29. struct RastPort *rp;
  30. struct IntuiMessage *im, *WaitPort(), *GetMsg();
  31. struct Gadget *gadget;
  32.  
  33. long int movex, movey, sizex, sizey;
  34.  
  35. struct BorderInfo
  36. {
  37.     BYTE SizeX, SizeY;
  38.     BYTE MoveX, MoveY;
  39. } borderinfo;
  40.  
  41. void DoBorderless(window, borderinfo)
  42. struct Window *window;
  43. struct BorderInfo *borderinfo;
  44. {
  45.     /* Make window borderless */
  46.  
  47.     register struct Layer_Info *LayerInfo = &window->WScreen->LayerInfo;
  48.     register struct Layer *Layer = window->RPort->Layer;
  49.     register long movex;
  50.     register long movey;
  51.     register long sizex;
  52.     register long sizey;
  53.  
  54.     if (window->Flags & BORDERLESS)    return;
  55.  
  56.     LockLayer(LayerInfo, Layer);
  57.  
  58.     window->Flags |= BORDERLESS;
  59.  
  60.     movex = -window->BorderLeft;
  61.     movey = -window->BorderTop;
  62.     sizex = window->BorderRight - movex;
  63.     sizey = window->BorderBottom - movey;
  64.  
  65.     window->BorderLeft =
  66.     window->BorderTop =
  67.     window->BorderRight =
  68.     window->BorderBottom = 0;
  69.  
  70.     window->GZZWidth += sizex;
  71.     window->GZZHeight += sizey;
  72.  
  73.     MoveLayer(LayerInfo, Layer, movex, movey);
  74.     SizeLayer(LayerInfo, Layer, sizex, sizey);
  75.     UnlockLayer(window->RPort->Layer);
  76.  
  77.     borderinfo->MoveX = movex;
  78.     borderinfo->MoveY = movey;
  79.     borderinfo->SizeX = sizex;
  80.     borderinfo->SizeY = sizey;
  81.  
  82.     /* Done making borderless */
  83. }
  84.  
  85. void UndoBorderless(window, borderinfo)
  86. struct Window *window;
  87. struct BorderInfo *borderinfo;
  88. {
  89.     /* ``Another fine mess you got me into!'' */
  90.  
  91.     register struct Layer_Info *LayerInfo = &window->WScreen->LayerInfo;
  92.     register struct Layer *Layer = window->RPort->Layer;
  93.     register long movex = borderinfo->MoveX;
  94.     register long movey = borderinfo->MoveY;
  95.     register long sizex = borderinfo->SizeX;
  96.     register long sizey = borderinfo->SizeY;
  97.  
  98.     if (window->Flags & BORDERLESS == 0)    return;
  99.  
  100.     LockLayer(LayerInfo, Layer);
  101.     SizeLayer(LayerInfo, Layer, -sizex, -sizey);
  102.     MoveLayer(LayerInfo, Layer, -movex, -movey);
  103.  
  104.     window->GZZWidth -= sizex;
  105.     window->GZZHeight -= sizey;
  106.  
  107.     window->BorderLeft = -movex;
  108.     window->BorderTop = -movey;
  109.     window->BorderRight = sizex + movex;
  110.     window->BorderBottom = sizey + movey;
  111.  
  112.     window->Flags &= ~BORDERLESS;
  113.  
  114.     RefreshWindowFrame(window);
  115.  
  116.     UnlockLayer(Layer);
  117.  
  118.     /* Done Undoing Borderless */
  119. }
  120.  
  121. main()
  122. {
  123.     long i;
  124.     char text[50];
  125.  
  126.     GfxBase = OpenLibrary("graphics.library", LIBRARY_VERSION);
  127.     LayersBase = OpenLibrary("layers.library", LIBRARY_VERSION);
  128.     IntuitionBase = OpenLibrary("intuition.library", LIBRARY_VERSION);
  129.     screen = OpenScreen(&ns);
  130.     nw.Screen = screen;
  131.     window = OpenWindow(&nw);
  132.  
  133.     DoBorderless(window, &borderinfo);
  134.  
  135.     rp = window->RPort;
  136.  
  137.     SetDrMd(rp, (long)JAM1);
  138.     for (i=0; i < 64; i++) {
  139.         sprintf(text, "This Is Color %2ld", i);
  140.         Move(rp, i < 32? 10L: 150L, 10L + 4*(i & 31));
  141.         SetAPen(rp, i);
  142.         Text(rp, &text[0], (long) strlen(text));
  143.     }
  144.  
  145.     printf("FirstGadget points at %lx\n", window->FirstGadget);
  146.  
  147.     for(gadget = window->FirstGadget; gadget; gadget=gadget->NextGadget) {
  148.         PrintGadget(gadget);
  149.         getchar();
  150.     }
  151.  
  152.     UndoBorderless(window, &borderinfo);
  153.  
  154.     getchar();
  155.  
  156.     CloseWindow(window);
  157.     CloseScreen(screen);
  158.     CloseLibrary(IntuitionBase);
  159.     CloseLibrary(LayersBase);
  160.     CloseLibrary(GfxBase);
  161. }
  162.  
  163. PrintGadget(gadget)
  164. struct Gadget *gadget;
  165. {
  166.     short Bits;
  167.  
  168.     printf("----------------------------------------------------------\n");
  169.     printf("Struct Gadget:\n");
  170.     printf("NextGadget.....%08lx\n",gadget->NextGadget);
  171.     printf("LeftEdge.......%d(dec)\n", gadget->LeftEdge);
  172.     printf("TopEdge........%d(dec)\n", gadget->TopEdge);
  173.     printf("Width..........%d(dec)\n", gadget->Width);
  174.     printf("Height.........%d(dec)\n", gadget->Height);
  175.     printf("Flags..........%04x\n", gadget->Flags);
  176.     Bits = gadget->Flags;
  177.     switch (Bits & GADGHIGHBITS) {
  178.     case GADGHCOMP:  printf("                GADGHCOMP\n"); break;
  179.     case GADGHBOX:   printf("                GADGHBOX\n"); break;
  180.     case GADGHIMAGE: printf("                GADGHIMAGE\n"); break;
  181.     case GADGHNONE:  printf("                GADGHNONE\n"); break;
  182.     }
  183.     if (Bits & GADGIMAGE)
  184.         printf("                GADGIMAGE\n");
  185.     if (Bits & GRELBOTTOM)
  186.         printf("                GRELBOTTOM\n");
  187.     if (Bits & GRELRIGHT)
  188.         printf("                GRELRIGHT\n");
  189.     if (Bits & GRELWIDTH)
  190.         printf("                GRELWIDTH\n");
  191.     if (Bits & GRELHEIGHT)
  192.         printf("                GRELHEIGHT\n");
  193.     if (Bits & SELECTED)
  194.         printf("                SELECTED\n");
  195.     if (Bits & GADGDISABLED)
  196.         printf("                GADGDISABLED\n");
  197.  
  198.     printf("Activation.....%04x\n", gadget->Activation);
  199.     Bits = gadget->Activation;
  200.     if (Bits & RELVERIFY)
  201.         printf("                RELVERIFY\n");
  202.     if (Bits & GADGIMMEDIATE)
  203.         printf("                GADGIMMEDIATE\n");
  204.     if (Bits & ENDGADGET)
  205.         printf("                ENDGADGET\n");
  206.     if (Bits & FOLLOWMOUSE)
  207.         printf("                FOLLOWMOUSE\n");
  208.     if (Bits & RIGHTBORDER)
  209.         printf("                RIGHTBORDER\n");
  210.     if (Bits & LEFTBORDER)
  211.         printf("                LEFTBORDER\n");
  212.     if (Bits & TOPBORDER)
  213.         printf("                TOPBORDER\n");
  214.     if (Bits & BOTTOMBORDER)
  215.         printf("                BOTTOMBORDER\n");
  216.     if (Bits & TOGGLESELECT)
  217.         printf("                TOGGLESELECT\n");
  218.     if (Bits & STRINGCENTER)
  219.         printf("                STRINGCENTER\n");
  220.     if (Bits & STRINGRIGHT)
  221.         printf("                STRINGRIGHT\n");
  222.     if (Bits & LONGINT)
  223.         printf("                LONGINT\n");
  224.     if (Bits & ALTKEYMAP)
  225.         printf("                ALTKEYMAP\n");
  226.  
  227.     printf("GadgetType.....%04x\n", gadget->GadgetType);
  228.     Bits = gadget->GadgetType;
  229.     if (Bits & SYSGADGET)
  230.         printf("                SYSGADGET\n");
  231.     if (Bits & SCRGADGET)
  232.         printf("                SCRGADGET\n");
  233.     if (Bits & GZZGADGET)
  234.         printf("                GZZGADGET\n");
  235.     if (Bits & REQGADGET)
  236.         printf("                REQGADGET\n");
  237.  
  238.     switch (Bits & 0x00F0) {
  239.     case SIZING:    printf("                SIZING\n"); break;
  240.     case WDRAGGING: printf("                WDRAGGING\n"); break;
  241.     case SDRAGGING: printf("                SDRAGGING\n"); break;
  242.     case WUPFRONT:  printf("                WUPFRONT\n"); break;
  243.     case SUPFRONT:  printf("                SUPFRONT\n"); break;
  244.     case WDOWNBACK: printf("                WDOWNBACK\n"); break;
  245.     case SDOWNBACK: printf("                SDOWNBACK\n"); break;
  246.     case CLOSE:     printf("                CLOSE\n"); break;
  247.     default:        printf("                Unknown System Gadget\n");
  248.     }
  249.  
  250.     switch (Bits & 0x000F) {
  251.     case BOOLGADGET: printf("                BOOLGADGET\n"); break;
  252.     case GADGET0002: printf("                GADGET0002\n"); break;
  253.     case PROPGADGET: printf("                PROPGADGET\n"); break;
  254.     case STRGADGET:  printf("                STRGADGET\n"); break;
  255.     default:         printf("                Unknown Appli Gadget\n");
  256.     }
  257.  
  258.     printf("GadgetRender...%08lx\n",gadget->GadgetRender);
  259.     printf("SelectRender...%08lx\n",gadget->SelectRender);
  260.     printf("GadgetText.....%08lx\n",gadget->GadgetText);
  261.     printf("MutualExclude..%08lx\n",gadget->MutualExclude);
  262.     printf("SpecialInfo....%08lx\n",gadget->SpecialInfo);
  263.     printf("GadgetID.......%04x\n", gadget->GadgetID);
  264.     printf("UserData.......%08lx\n",gadget->UserData);
  265. }
  266.